public class Test {
    public static void main(String[] args) {
        /**
         *  性能测试
         */

        /*
         1. 什么是性能测试
              生活中遇到的软件的性能问题：
              性能测试的定义：测试人员借助性能测试工具（LoadRunner），模拟系统在不同场景下， 对应的性能指标是否达到预期
        /     性能测试和功能测试有什么区别:
                  功能测试： 依靠人工来完成
                  性能测试： 依靠工具来完成

                  功能测试： 不管是什么样的场景下， 只要能够正常运行即可
                  性能测试： 软件在一些极端的情况下， 是不是能够运行.
              什么样的表现输入软件好的表现，什么样的表现属于软件性能不好的表现

              影响一个软件性能的因素有哪些
                  软件算法， 设计， 服务器， 网络， 用户人数
                  硬件：服务器 CPU 利用率， 内存， 磁盘操作频率， CPU核心数，带宽
                  软件：算法， 编程语言 ，
                  用户：用户并发数， 用户使用时长.
         2. 为什么要做性能测试
              获取系统性能的指标，作为性能指标的基准
              验证系统的性能指标是否达到要求（性能需求）
                      应用程序是否能够满足系统要求的各中性能指标
                      应用程序是否能处理预期的用户负载并有盈余能力
                      应用程序是否能处理业务所需要的事务数量
                      在预期和非预期的用户负载下，应用程序是否稳定
                      是否能确保用户在真正使用软件时获得舒服的体验
              发现系统的性能瓶颈，内存泄漏等问题。
              系统正常工作的情况下的最大容量。
              帮助系统运维部门能更好的规划硬件配置
         3.性能测试常见的术语以及性能测试衡量指标 （**）
                  1.并发用户数 ： （大量用户，同时）
                      系统用户数：简单地说就是该系统的注册用户数。例如，BestTest论坛里存在6666个注册用户，他们可以是活跃的，也可以是僵尸的。
                      业务层面的并发用户数：指的是同时向服务器发送请求的用户数量。
                      后端服务器层面的并发用户数：指的是同时向服务器发送请求的请求数量。
                      在线用户数：成功登录系统的用户数
                      并发用户数：大量用户访问对应的系统，此时访问的用户数，就是并发用户数量.
                  2.响应时间/平均响应时间（RT/ART)
                             1).用户响应时间： 响应时间分为前端展示时间和系统响应时间两部分
                             2）。请求响应时间 ：分为web服务器，应用服务器，数据库服务器，等各种服务器之间通信和处理请求的时间
                             3），影响一个软件响应时间的因素：数据库性能，网络带宽，服务器处理性能， 软件算法，逻辑，设备.
                  3.事务响应时间（Transaction Reponse Time）
                             每秒完成的事务数，通常指每秒成功的事务数，性能测试中重要的综合性性能指标
                             这里的一个事务是一个业务度量单位，是指一组密切相关的子操作的组合。.
                  4.每秒事务通过数（Transaction Per Second）
                              处理事务的数量 / 事务花费的时间
                              每秒通过的事务越多，自然说明软件性能越好.
                  5.点击率（Hit Per Second）。
                              用户点击的数量. （这个不是衡量性能的标准）
                              点击量 / 时间 = 点击率.
                  6.吞吐量（Throughput）
                              用户一次请求和服务器数据之间的一个交互量.
                     吞吐率
                              吞吐量 / 时间 = 吞吐率
                              吞吐率越高性能越好，越低性能越低.
                  7.思考时间（Think Time）
                              指模拟正式用户在实际操作时的停顿间隔时间，从业务的角度来讲，思考时间指的是用户在进行操作
                              时，每个请求之间的间隔时间。.

                  8.资源利用率.
                              不同系统资源的使用情况。包含CPU，内存，硬盘，网络等。.
         4.性能测试的分类  （**）
                  .1. 基准性能测试
                         让系统正常情况下运行，观察软件性能指标 （刚上线的）
                       应用场景：
                          软件刚上线需要进行性能摸底.
                  2. 负载性能测试
                         验证软件在一定的压力情况下运行， 观察性能指标是否出现了拐点.
                         .
                  3. 压力性能测试
                          系统处于一个极限的状态下或者处于饱和的状态下， 观察系统的性能指标. （往往会把系统搞崩溃）
                  4. 可靠性能测试
                          验证系统在一个持续的时间段内运行，在这个时间段，观察系统各项性能指标是否正常
                          .
         5.性能测试如何展开.
         6. 性能测试执行流程.
                   功能测试执行流程： 需求分析->测试计划->测试设计、测试开发->测试执行->测试评估 （写一个测试报告）（测试报告就是一个文档）-> 上线.
                性能测试的流程： 需求分析 -> 测试计划 -> 选择一款性能测试工具 -> 性能测试脚本编写 -> 执行性能测试脚本 -> 产出一个性能测试报告
               如果测试性能的时候出现了不符合预期的情况， 我们不叫它 bug， 它叫性能瓶颈
               在性能测试中 出现了性能瓶颈， 开发修复的过程中， 叫它优化。
         **** LoadRunner 讲解 ****
         为什么选择 LoadRunner
         1. LoadRunner 有录制功能 ， Jmeter没有录制功能
         2. 可以设计非常丰富的测试场景
         3. LoadRunner 能够设计出非常丰富的测试报告
        LoadRunner 三大组件之间的关系
         每个组件负责的工作是什么
          Controller 组件 ： 用来设计场景 ， 运行场景
         Analysis 组件 ： 产生测试性能测试报告
         Virtual User Generator 组件 ： 录制脚本，编写脚本
         那么这三个之间的关系是什么
         VUG 产出脚本 然后 给到 Controller 在把响应的场景设计好 ， 设计好之后 把对应的场景 运行结束之后，
         然后传递给 Analysis 里面 产生测试报告
         ****  LoadRunner 脚本的录制 *****
         这里录制的是 LoadRunner 自带的一个系统
           1. 了解一下 webTours 系统
            WebTours 如何启动
          D:\HP_LoadRunner\WebTours  -> StartServer.bat
            WebTours 配置
          只有一个 IP 是不能访问成功的， 还需要有一个 端口号
          D:\HP_LoadRunner\WebTours\conf  -> httpd.conf
              Listen 1080
         然后访问： http://192.168.216.1:1080/WebTours/
         第二个配置：
         D:\HP_LoadRunner\WebTours\cgi-bin\users
         里面存放着 用户信息
          2. 脚本录制
         课件
          3. 编译
          课件
          4. 运行（回放）
         脚本加强
          1) 为什么要对脚本进行加强

          2） 脚本如何加强
              1. 事务的插入
                  函数： 开始 事务的函数 ： 	lr_start_transaction("login");
                        结束 事务的函数 ：	lr_end_transaction("login", LR_AUTO);
                  注意事项：
                        事务必须有开始有结束
                        开始事务和结束事务之间的事务名称必须一致.
                  日志：.
              2. 插入集合点
                  什么是集合：
                  函数：lr_rendezvous("rendzvous1");
              3. 插入检查点
                     什么是检查点：
                   函数： 	web_reg_find("Fail=NotFound",
        		                         "Search=All",
        		                         "SaveCount=",
        		                         "Text=Welcome",
        		                         LAST);
                      // 这个必须放在请求 url 之前
             4. 参数化
                     先参数化设置：
                    然后再在 Runtime Settings 文件里面 ： 把 Extended log 里面的 Parameter substitution 选上
              5. 打印相关日志
                  lr_log_message
                  lr_output_message
        */


        // **** 创建运行场景 ****
        // 通过 controller 设计简单的测试场景， 可以简单的分析性能测试报告
        // 1. Controller
        //    1.设计场景
        //          Controller打开方式
        //           1） 通过 VUG 打开
        //           2） 直接双击 Controller
        //           3） 设计场景
        //            （为什么在 VUG 里面直接运行脚本达不到性能测试的目的呢？ 因为要进行性能检测， Controller）.
        //    2.运行场景
        //          .
        // 2. Analysis
        // 测试报告的产生

    }
}
